home *** CD-ROM | disk | FTP | other *** search
/ All for Cell Phones: Sony Ericsson / Sony-Ericsson 2004.iso / Java / Collision / collision.jar / ColldemoSl45$Game.class (.txt) < prev    next >
Encoding:
Java Class File  |  2002-06-20  |  18.4 KB  |  1,140 lines

  1. import com.siemens.mp.game.ExtendedImage;
  2. import com.siemens.mp.game.GraphicObjectManager;
  3. import com.siemens.mp.game.Sprite;
  4. import java.io.InputStream;
  5. import javax.microedition.io.Connector;
  6. import javax.microedition.lcdui.Canvas;
  7. import javax.microedition.lcdui.Font;
  8. import javax.microedition.lcdui.Graphics;
  9. import javax.microedition.lcdui.Image;
  10. import javax.microedition.rms.InvalidRecordIDException;
  11. import javax.microedition.rms.RecordComparator;
  12. import javax.microedition.rms.RecordEnumeration;
  13. import javax.microedition.rms.RecordFilter;
  14. import javax.microedition.rms.RecordStore;
  15. import javax.microedition.rms.RecordStoreException;
  16. import javax.microedition.rms.RecordStoreNotOpenException;
  17.  
  18. class ColldemoSl45$Game extends Canvas implements Runnable {
  19.    private static final int GAME_SCREEN_WIDTH = 96;
  20.    private static final int GAME_SCREEN_HEIGHT = 80;
  21.    private byte[] car0Image;
  22.    private byte[] car0Mask;
  23.    private byte[] bgImage;
  24.    private byte[] mntsImage;
  25.    private byte[] obsImage;
  26.    private byte[] obsMask;
  27.    private byte[] flipImage;
  28.    private byte[] flipMask;
  29.    private byte[] countImage;
  30.    private byte[] countMask;
  31.    private byte[] goImage;
  32.    private byte[] goMask;
  33.    private byte[] textImage;
  34.    private byte[] textMask;
  35.    private byte[] winnerImage;
  36.    private byte[][] stageImages;
  37.    private byte[] devImage;
  38.    private byte[] titleImage;
  39.    private byte[][] levelMap;
  40.    private byte[][] levelTrk;
  41.    private byte[] theMap;
  42.    private byte[] theTrack;
  43.    private Image gameScreenImage;
  44.    private ExtendedImage gameScreen;
  45.    private GraphicObjectManager gfxManager;
  46.    private boolean readyToPaint;
  47.    private Image[] numberImages;
  48.    private Image[] gearImages;
  49.    private byte[] roadbmp;
  50.    private byte[][] roadpixels;
  51.    private byte[] roadpix;
  52.    private byte[] keyMap;
  53.    private Sprite countSprite;
  54.    private Sprite goSprite;
  55.    private Sprite textSprite;
  56.    private Sprite carSprite;
  57.    private Sprite[] obsSprite;
  58.    private Sprite flipSprite;
  59.    private int[] zvals;
  60.    private int[] zdiffs;
  61.    private int[] object_widths;
  62.    private String[] hi_names;
  63.    private int[] hi_scores;
  64.    private int[] player;
  65.    private int frames;
  66.    private int lasttime;
  67.    private int fps;
  68.    private int[] linetab;
  69.    private int[] z_to_scale;
  70.    private int[] z_to_y;
  71.    private int joystick;
  72.    private int[] obsticles;
  73.    private int availObsticle;
  74.    private int mapPos;
  75.    private int lastScore;
  76.    private int lastCountdown;
  77.    private int lastSpeed;
  78.    private int lastGear;
  79.    private int lastTrack;
  80.    private int flipy;
  81.    private int flipyvel;
  82.    private int flipspr;
  83.    private int cdFrames;
  84.    private int cdLastTime;
  85.    private int cdDigit;
  86.    private int cdFPS;
  87.    private int gameState;
  88.    private int gameTimer;
  89.    private Font fontsmall;
  90.    private int levelNum;
  91.    private int countDown;
  92.    private int trackSeg;
  93.    private boolean redraw;
  94.    // $FF: synthetic field
  95.    private final ColldemoSl45 this$0;
  96.  
  97.    public ColldemoSl45$Game(ColldemoSl45 var1) {
  98.       this.this$0 = var1;
  99.       this.gameScreen = null;
  100.       this.readyToPaint = false;
  101.       this.zvals = new int[]{195, 174, 158, 144, 133, 123, 115, 107, 101, 95, 90, 86, 81, 78, 74, 71, 68, 65, 63, 61, 59, 57, 55, 53, 51, 50, 48, 47, 46, 44, 43, 42, 41, 40, 39, 38, 37};
  102.       this.object_widths = new int[]{16, 14, 12, 10, 8, 6, 4, 3};
  103.       this.hi_names = new String[]{"Nigel", "Andrew", "Sarah", "Phil"};
  104.       this.hi_scores = new int[]{1000, 950, 900, 850};
  105.       this.theMap = new byte[4000];
  106.       this.theTrack = new byte[8000];
  107.       this.roadbmp = new byte[444];
  108.       this.roadpixels = new byte[28][444];
  109.  
  110.       try {
  111.          this.gameScreenImage = Image.createImage(96, 80);
  112.          this.gameScreen = new ExtendedImage(this.gameScreenImage);
  113.          this.gameScreen.clear((byte)0);
  114.          this.roadpix = this.ReadByteArray("track.bin", 12432);
  115.          this.numberImages = new Image[10];
  116.          Image var6 = Image.createImage("/numbers.png");
  117.  
  118.          for(int var2 = 0; var2 < 10; ++var2) {
  119.             this.numberImages[var2] = Image.createImage(5, 7);
  120.             Graphics var5 = this.numberImages[var2].getGraphics();
  121.             var5.drawImage(var6, -var2 * 5, 0, 16 | 4);
  122.          }
  123.  
  124.          this.obsImage = this.ReadByteArray("obs.1bp", 1536);
  125.          this.obsMask = this.ReadByteArray("obsm.1bp", 1536);
  126.          this.bgImage = this.ReadByteArray("bg.1bp", 960);
  127.          this.devImage = this.ReadByteArray("dev.1bp", 960);
  128.          this.titleImage = this.ReadByteArray("title.1bp", 960);
  129.          this.winnerImage = this.ReadByteArray("winner.1bp", 960);
  130.          this.stageImages = new byte[5][];
  131.          this.stageImages[0] = this.ReadByteArray("stage1.1bp", 960);
  132.          this.gearImages = new Image[2];
  133.          this.gearImages[0] = Image.createImage("/gear1.png");
  134.          this.gearImages[1] = Image.createImage("/gear2.png");
  135.          this.mntsImage = this.ReadByteArray("mnts.1bp", 372);
  136.          this.car0Image = this.ReadByteArray("car0.1bp", 204);
  137.          this.car0Mask = this.ReadByteArray("car0m.1bp", 204);
  138.          this.flipImage = this.ReadByteArray("flip.1bp", 256);
  139.          this.flipMask = this.ReadByteArray("flipm.1bp", 256);
  140.          this.countImage = this.ReadByteArray("321.1bp", 261);
  141.          this.countMask = this.ReadByteArray("321m.1bp", 261);
  142.          this.goImage = this.ReadByteArray("go.1bp", 261);
  143.          this.goMask = this.ReadByteArray("gom.1bp", 261);
  144.          this.textImage = this.ReadByteArray("text.1bp", 231);
  145.          this.textMask = this.ReadByteArray("textm.1bp", 231);
  146.          this.levelMap = new byte[5][];
  147.          this.levelTrk = new byte[5][];
  148.          this.levelMap[0] = this.ReadByteArray("level1.map", 252);
  149.          this.levelTrk[0] = this.ReadByteArray("level1.trk", 18);
  150.          this.gfxManager = new GraphicObjectManager();
  151.  
  152.          for(int var4 = 0; var4 < 37; ++var4) {
  153.             for(int var9 = 0; var9 < 14; ++var9) {
  154.                System.arraycopy(this.roadpix, 888 * var9 + var4 * 24, this.roadpixels[var9 * 2 + 0], var4 * 12, 12);
  155.                System.arraycopy(this.roadpix, 888 * var9 + var4 * 24 + 12, this.roadpixels[var9 * 2 + 1], var4 * 12, 12);
  156.             }
  157.          }
  158.  
  159.          this.obsSprite = new Sprite[8];
  160.  
  161.          for(int var10 = 0; var10 < 8; ++var10) {
  162.             this.obsSprite[var10] = new Sprite(this.obsImage, 0, 16, 16, this.obsMask, 0, 48);
  163.             this.gfxManager.addObject(this.obsSprite[var10]);
  164.             this.obsSprite[var10].setVisible(false);
  165.          }
  166.  
  167.          this.carSprite = new Sprite(this.car0Image, 0, 32, 17, this.car0Mask, 0, 3);
  168.          this.gfxManager.addObject(this.carSprite);
  169.          this.carSprite.setPosition(32, 64);
  170.          this.carSprite.setVisible(false);
  171.          this.flipSprite = new Sprite(this.flipImage, 0, 32, 32, this.flipMask, 0, 2);
  172.          this.gfxManager.addObject(this.flipSprite);
  173.          this.flipSprite.setVisible(false);
  174.          this.countSprite = new Sprite(this.countImage, 0, 24, 29, this.countMask, 0, 3);
  175.          this.gfxManager.addObject(this.countSprite);
  176.          this.countSprite.setVisible(false);
  177.          this.goSprite = new Sprite(this.goImage, 0, 72, 29, this.goMask, 0, 1);
  178.          this.gfxManager.addObject(this.goSprite);
  179.          this.goSprite.setVisible(false);
  180.          this.textSprite = new Sprite(this.textImage, 0, 56, 11, this.textMask, 0, 3);
  181.          this.gfxManager.addObject(this.textSprite);
  182.          this.textSprite.setVisible(false);
  183.       } catch (Exception var8) {
  184.          System.out.println("i1 Exception: " + var8);
  185.       }
  186.  
  187.       this.fontsmall = Font.getFont(32, 0, 8);
  188.       this.player = new int[12];
  189.       this.obsticles = new int[32];
  190.       this.mapPos = 0;
  191.       this.linetab = new int[37];
  192.       this.zdiffs = new int[37];
  193.  
  194.       for(int var11 = 0; var11 < 36; ++var11) {
  195.          this.zdiffs[var11] = this.zvals[var11] - this.zvals[var11 + 1];
  196.       }
  197.  
  198.       this.zdiffs[36] = 0;
  199.       this.z_to_y = new int[500];
  200.  
  201.       for(int var12 = 0; var12 < this.zvals[35]; ++var12) {
  202.          this.z_to_y[var12] = 64;
  203.       }
  204.  
  205.       for(int var13 = this.zvals[0]; var13 < 500; ++var13) {
  206.          this.z_to_y[var13] = 27;
  207.       }
  208.  
  209.       for(int var14 = 0; var14 < 36; ++var14) {
  210.          for(int var3 = this.zvals[var14]; var3 > this.zvals[var14 + 1]; --var3) {
  211.             this.z_to_y[var3] = 43 + var14 - 16;
  212.          }
  213.       }
  214.  
  215.       this.z_to_scale = new int[500];
  216.  
  217.       for(int var15 = 0; var15 < 500; ++var15) {
  218.          int var7;
  219.          if (var15 > 0) {
  220.             var7 = 888 / var15;
  221.          } else {
  222.             var7 = 16;
  223.          }
  224.  
  225.          if (var7 < this.object_widths[7]) {
  226.             this.z_to_scale[var15] = 7;
  227.          } else {
  228.             for(int var17 = 0; var17 < 8; ++var17) {
  229.                if (var7 >= this.object_widths[var17]) {
  230.                   this.z_to_scale[var15] = var17;
  231.                   break;
  232.                }
  233.             }
  234.          }
  235.       }
  236.  
  237.       this.keyMap = new byte[256];
  238.  
  239.       for(int var16 = 0; var16 < 256; ++var16) {
  240.          this.keyMap[var16] = 0;
  241.       }
  242.  
  243.       this.keyMap[((Canvas)this).getKeyCode(2) & 255] = 1;
  244.       this.keyMap[((Canvas)this).getKeyCode(5) & 255] = 2;
  245.       this.keyMap[((Canvas)this).getKeyCode(1) & 255] = 4;
  246.       this.keyMap[((Canvas)this).getKeyCode(6) & 255] = 8;
  247.       this.keyMap[((Canvas)this).getKeyCode(8) & 255] = 16;
  248.       this.keyMap[252] = 16;
  249.       this.keyMap[255] = 32;
  250.       this.keyMap[52] = 1;
  251.       this.keyMap[54] = 2;
  252.       this.keyMap[50] = 4;
  253.       this.keyMap[56] = 8;
  254.       this.keyMap[53] = 16;
  255.       System.gc();
  256.       this.ReadSettings();
  257.       this.cdFPS = 18;
  258.       this.setState(0);
  259.       this.readyToPaint = true;
  260.    }
  261.  
  262.    public int ReadSettings() {
  263.       RecordStore var1 = null;
  264.       boolean var3 = false;
  265.       int var4 = 0;
  266.  
  267.       try {
  268.          var1 = RecordStore.openRecordStore("settings", false);
  269.       } catch (RecordStoreException var15) {
  270.       }
  271.  
  272.       if (var1 == null) {
  273.          return 0;
  274.       } else {
  275.          byte[] var2 = new byte[128];
  276.          var2[0] = 0;
  277.          RecordEnumeration var7 = null;
  278.  
  279.          try {
  280.             var7 = var1.enumerateRecords((RecordFilter)null, (RecordComparator)null, false);
  281.          } catch (RecordStoreNotOpenException var14) {
  282.          }
  283.  
  284.          try {
  285.             var4 = var7.nextRecordId();
  286.          } catch (InvalidRecordIDException var13) {
  287.          }
  288.  
  289.          try {
  290.             var1.getRecord(var4, var2, 0);
  291.          } catch (RecordStoreException var12) {
  292.          }
  293.  
  294.          byte[] var5 = new byte[16];
  295.  
  296.          for(int var8 = 0; var8 < 4; ++var8) {
  297.             int var6 = 0;
  298.  
  299.             for(int var9 = 0; var9 < 16; ++var9) {
  300.                byte var10 = var2[var8 * 18 + var9];
  301.                if (var10 != 0) {
  302.                   var5[var9] = var10;
  303.                   ++var6;
  304.                }
  305.             }
  306.  
  307.             this.hi_names[var8] = new String(var5, 0, var6);
  308.             this.hi_scores[var8] = var2[var8 * 18 + 16] & 255 | var2[var8 * 18 + 17] << 8;
  309.          }
  310.  
  311.          try {
  312.             var1.closeRecordStore();
  313.          } catch (RecordStoreException var11) {
  314.          }
  315.  
  316.          return 1;
  317.       }
  318.    }
  319.  
  320.    public void WriteSettings() {
  321.       RecordStore var1 = null;
  322.       int var3 = 0;
  323.       int var4 = 0;
  324.  
  325.       try {
  326.          var1 = RecordStore.openRecordStore("settings", true);
  327.       } catch (RecordStoreException var16) {
  328.       }
  329.  
  330.       if (var1 != null) {
  331.          try {
  332.             var3 = var1.getNumRecords();
  333.          } catch (RecordStoreException var15) {
  334.          }
  335.  
  336.          RecordEnumeration var7 = null;
  337.  
  338.          try {
  339.             var7 = var1.enumerateRecords((RecordFilter)null, (RecordComparator)null, false);
  340.          } catch (RecordStoreNotOpenException var14) {
  341.          }
  342.  
  343.          try {
  344.             var4 = var7.nextRecordId();
  345.          } catch (InvalidRecordIDException var13) {
  346.          }
  347.  
  348.          byte[] var2 = new byte[128];
  349.  
  350.          for(int var8 = 0; var8 < 4; ++var8) {
  351.             int var6 = this.hi_names[var8].length();
  352.             byte[] var5 = this.hi_names[var8].getBytes();
  353.  
  354.             for(int var9 = 0; var9 < 16; ++var9) {
  355.                if (var9 < var6) {
  356.                   var2[var8 * 18 + var9] = var5[var9];
  357.                } else {
  358.                   var2[var8 * 18 + var9] = 0;
  359.                }
  360.             }
  361.  
  362.             var2[var8 * 18 + 16] = (byte)(this.hi_scores[var8] & 255);
  363.             var2[var8 * 18 + 17] = (byte)(this.hi_scores[var8] >> 8 & 255);
  364.          }
  365.  
  366.          if (var3 == 0) {
  367.             try {
  368.                var1.addRecord(var2, 0, 128);
  369.             } catch (RecordStoreException var12) {
  370.             }
  371.          } else {
  372.             try {
  373.                var1.setRecord(var4, var2, 0, 128);
  374.             } catch (RecordStoreException var11) {
  375.             }
  376.          }
  377.  
  378.          try {
  379.             var1.closeRecordStore();
  380.          } catch (RecordStoreException var10) {
  381.          }
  382.       }
  383.  
  384.    }
  385.  
  386.    public void initLevel(byte[] var1, byte[] var2) {
  387.       for(int var3 = 0; var3 < 1000; ++var3) {
  388.          this.theMap[var3 * 4 + 0] = 0;
  389.          this.theMap[var3 * 4 + 1] = 0;
  390.          this.theMap[var3 * 4 + 2] = 0;
  391.          this.theMap[var3 * 4 + 3] = 0;
  392.       }
  393.  
  394.       for(int var8 = 0; (var1[var8 * 4 + 0] & 255) != 255; ++var8) {
  395.          int var7 = var1[var8 * 4 + 1] & 255 | (var1[var8 * 4 + 2] & 255) << 8;
  396.          if (this.theMap[var7 * 4 + 0] == 0) {
  397.             this.theMap[var7 * 4 + 0] = var1[var8 * 4 + 0];
  398.             this.theMap[var7 * 4 + 1] = var1[var8 * 4 + 3];
  399.          } else {
  400.             this.theMap[var7 * 4 + 2] = var1[var8 * 4 + 0];
  401.             this.theMap[var7 * 4 + 3] = var1[var8 * 4 + 3];
  402.          }
  403.       }
  404.  
  405.       int var6 = var2[0] << 1;
  406.       int var5 = 3;
  407.       int var10 = var2[var5 + 1] & 255 | (var2[var5 + 2] & 255) << 8;
  408.  
  409.       for(int var9 = 0; var9 < 1000; ++var9) {
  410.          if (var9 == var10) {
  411.             var6 = var2[var5 + 0] << 1;
  412.             var5 += 3;
  413.             if ((var2[var5 + 0] & 255) == 255) {
  414.                var10 = -1;
  415.             } else {
  416.                var10 = var2[var5 + 1] & 255 | (var2[var5 + 2] & 255) << 8;
  417.             }
  418.          }
  419.  
  420.          int var4 = var6 + ((var9 & 2) >> 1);
  421.          this.theTrack[var9 * 8 + 0] = (byte)var4;
  422.          this.theTrack[var9 * 8 + 1] = (byte)var4;
  423.          this.theTrack[var9 * 8 + 2] = (byte)var4;
  424.          this.theTrack[var9 * 8 + 3] = (byte)var4;
  425.          this.theTrack[var9 * 8 + 4] = (byte)var4;
  426.          this.theTrack[var9 * 8 + 5] = (byte)var4;
  427.          this.theTrack[var9 * 8 + 6] = (byte)var4;
  428.          this.theTrack[var9 * 8 + 7] = (byte)var4;
  429.       }
  430.  
  431.    }
  432.  
  433.    public void startGame() {
  434.       this.carSprite.setVisible(true);
  435.       this.carSprite.setFrame(0);
  436.       this.carSprite.setPosition(32, 64);
  437.       this.flipSprite.setVisible(false);
  438.  
  439.       for(int var1 = 0; var1 < 37; ++var1) {
  440.          this.linetab[var1] = 2;
  441.       }
  442.  
  443.       this.redraw = true;
  444.       this.player[0] = 0;
  445.       this.player[1] = 0;
  446.       this.player[2] = 0;
  447.       this.player[3] = 0;
  448.       this.player[4] = 0;
  449.       this.player[6] = 0;
  450.       this.player[7] = 40;
  451.       this.player[8] = 0;
  452.       this.player[9] = 0;
  453.       this.player[10] = 0;
  454.       this.player[11] = 0;
  455.       this.lastScore = -1;
  456.       this.lastCountdown = -1;
  457.       this.lastSpeed = -1;
  458.       this.lastGear = -1;
  459.       this.lastTrack = 0;
  460.       this.cdDigit = this.player[7];
  461.       this.trackSeg = 0;
  462.       this.initObsticles();
  463.    }
  464.  
  465.    public void spritesOff() {
  466.       this.countSprite.setVisible(false);
  467.       this.goSprite.setVisible(false);
  468.       this.textSprite.setVisible(false);
  469.  
  470.       for(int var1 = 0; var1 < 8; ++var1) {
  471.          this.obsSprite[var1].setVisible(false);
  472.       }
  473.  
  474.       this.carSprite.setVisible(false);
  475.       this.flipSprite.setVisible(false);
  476.    }
  477.  
  478.    public void endGame() {
  479.       this.player[5] = 0;
  480.       this.levelNum = 0;
  481.       this.spritesOff();
  482.    }
  483.  
  484.    public void initObsticles() {
  485.       for(int var4 = 28; var4 >= 0; var4 -= 4) {
  486.          this.obsticles[var4 + 2] = 0;
  487.       }
  488.  
  489.       byte var1 = 5;
  490.       byte var2 = 26;
  491.       this.availObsticle = 28;
  492.  
  493.       for(int var3 = var1; var3 < var2; ++var3) {
  494.          if (this.theMap[var3 * 4 + 0] != 0) {
  495.             this.obsticles[this.availObsticle + 0] = -1;
  496.             this.obsticles[this.availObsticle + 1] = (this.theMap[var3 * 4 + 0] - 8) * 240;
  497.             this.obsticles[this.availObsticle + 2] = var3 << 11;
  498.             this.obsticles[this.availObsticle + 3] = (this.theMap[var3 * 4 + 1] - 1) * 8;
  499.             this.obsSprite[this.availObsticle >> 2].setVisible(true);
  500.             this.availObsticle -= 4;
  501.             if (this.availObsticle < 0) {
  502.                this.availObsticle = 28;
  503.             }
  504.          }
  505.  
  506.          if (this.theMap[var3 * 4 + 2] != 0) {
  507.             this.obsticles[this.availObsticle + 0] = -1;
  508.             this.obsticles[this.availObsticle + 1] = (this.theMap[var3 * 4 + 2] - 8) * 240;
  509.             this.obsticles[this.availObsticle + 2] = var3 << 11;
  510.             this.obsticles[this.availObsticle + 3] = (this.theMap[var3 * 4 + 3] - 1) * 8;
  511.             this.obsSprite[this.availObsticle >> 2].setVisible(true);
  512.             this.availObsticle -= 4;
  513.             if (this.availObsticle < 0) {
  514.                this.availObsticle = 28;
  515.             }
  516.          }
  517.       }
  518.  
  519.       this.mapPos = var2;
  520.    }
  521.  
  522.    public void drawNDigitNumber(Graphics var1, int var2, int var3, int var4, int var5) {
  523.       var2 += 6 * (var5 - 1);
  524.  
  525.       for(int var6 = 0; var6 < var5; ++var6) {
  526.          int var7 = var4 % 10;
  527.          var1.drawImage(this.numberImages[var7], var2, var3, 16 | 4);
  528.          var4 /= 10;
  529.          var2 -= 6;
  530.       }
  531.  
  532.    }
  533.  
  534.    public byte[] ReadByteArray(String var1, int var2) {
  535.       byte[] var3 = null;
  536.  
  537.       try {
  538.          InputStream var4 = this.getClass().getResourceAsStream(var1);
  539.          var3 = new byte[var2];
  540.          var4.read(var3, 0, var2);
  541.          var4.close();
  542.       } catch (Exception var5) {
  543.          System.out.println("Exception: please copy the sprite-files from \\res to your class-files directory (CLASSPATH)!\n" + var5);
  544.       }
  545.  
  546.       return var3;
  547.    }
  548.  
  549.    public int[] ReadIntArray(String var1, int var2) {
  550.       Object var3 = null;
  551.       int[] var4 = null;
  552.  
  553.       try {
  554.          InputStream var6 = Connector.openInputStream("resource:" + var1);
  555.          byte[] var8 = new byte[4];
  556.          var4 = new int[var2];
  557.  
  558.          for(int var5 = 0; var5 < var2; ++var5) {
  559.             var6.read(var8, 0, 4);
  560.             var4[var5] = var8[0] & 255 | (var8[1] & 255) << 8 | (var8[2] & 255) << 16 | (var8[3] & 255) << 24;
  561.          }
  562.  
  563.          var6.close();
  564.       } catch (Exception var7) {
  565.          System.out.println("Exception: please copy the sprite-files from \\res to your class-files directory (CLASSPATH)!\n" + var7);
  566.       }
  567.  
  568.       return var4;
  569.    }
  570.  
  571.    public int validateAction(int var1, int var2, String var3) {
  572.       byte var4 = 1;
  573.       switch (var2) {
  574.          case 0:
  575.             this.addHiScore(this.player[5], var3);
  576.             this.setState(9);
  577.             var4 = 0;
  578.             break;
  579.          case 1:
  580.             this.setState(1);
  581.             var4 = 0;
  582.             break;
  583.          case 2:
  584.             if (var1 == 0) {
  585.                this.setState(2);
  586.                var4 = 0;
  587.             } else if (var1 == 1) {
  588.                this.this$0.notifyDestroyed();
  589.                var4 = 0;
  590.             } else if (var1 == 2) {
  591.                this.setState(1);
  592.                var4 = 0;
  593.             } else if (var1 == 3) {
  594.                this.setState(10);
  595.                var4 = 2;
  596.             }
  597.       }
  598.  
  599.       return var4;
  600.    }
  601.  
  602.    public boolean checkHiScore(int var1) {
  603.       for(int var2 = 0; var2 < 4; ++var2) {
  604.          if (var1 > this.hi_scores[var2]) {
  605.             return true;
  606.          }
  607.       }
  608.  
  609.       return false;
  610.    }
  611.  
  612.    public void addHiScore(int var1, String var2) {
  613.       for(int var3 = 0; var3 < 4; ++var3) {
  614.          if (var1 > this.hi_scores[var3]) {
  615.             for(int var4 = 3; var4 > var3; --var4) {
  616.                this.hi_names[var4] = this.hi_names[var4 - 1];
  617.                this.hi_scores[var4] = this.hi_scores[var4 - 1];
  618.             }
  619.  
  620.             this.hi_names[var3] = var2;
  621.             this.hi_scores[var3] = var1;
  622.             break;
  623.          }
  624.       }
  625.  
  626.    }
  627.  
  628.    public void drawHiScore(Graphics var1) {
  629.       var1.setFont(this.fontsmall);
  630.       var1.setColor(0);
  631.       var1.drawString("High Scores", (((Canvas)this).getWidth() >> 1) - (this.fontsmall.stringWidth("High Scores") >> 1), 0, 16 | 4);
  632.  
  633.       for(int var2 = 1; var2 < 5; ++var2) {
  634.          var1.drawString(String.valueOf(var2), 0, 2 + 13 * var2, 16 | 4);
  635.          var1.drawString(this.hi_names[var2 - 1], 8, 2 + 13 * var2, 16 | 4);
  636.          var1.drawString(String.valueOf(this.hi_scores[var2 - 1]), 96 - this.fontsmall.stringWidth(String.valueOf(this.hi_scores[var2 - 1])), 2 + 13 * var2, 16 | 4);
  637.       }
  638.  
  639.    }
  640.  
  641.    public void clearRoad() {
  642.       for(int var1 = 0; var1 < 444; ++var1) {
  643.          this.roadbmp[var1] = 0;
  644.       }
  645.  
  646.    }
  647.  
  648.    public void setState(int var1) {
  649.       this.joystick = 0;
  650.       this.gameState = var1;
  651.       switch (var1) {
  652.          case 0:
  653.             this.clearRoad();
  654.             this.gameTimer = (int)System.currentTimeMillis();
  655.             break;
  656.          case 1:
  657.             this.clearRoad();
  658.             this.gameTimer = (int)System.currentTimeMillis();
  659.             this.endGame();
  660.             break;
  661.          case 2:
  662.             this.spritesOff();
  663.             this.clearRoad();
  664.             this.gameTimer = (int)System.currentTimeMillis();
  665.             break;
  666.          case 3:
  667.             this.initLevel(this.levelMap[this.levelNum], this.levelTrk[this.levelNum]);
  668.             this.startGame();
  669.             this.countDown = 0;
  670.             this.gameTimer = (int)System.currentTimeMillis();
  671.             break;
  672.          case 4:
  673.             this.cdFrames = 0;
  674.             break;
  675.          case 5:
  676.             this.gameTimer = (int)System.currentTimeMillis();
  677.             break;
  678.          case 6:
  679.             this.gameTimer = (int)System.currentTimeMillis();
  680.             break;
  681.          case 7:
  682.             this.gameTimer = (int)System.currentTimeMillis();
  683.             break;
  684.          case 8:
  685.             this.this$0.setNameBox();
  686.             break;
  687.          case 9:
  688.             this.spritesOff();
  689.             this.gameScreen.clear((byte)0);
  690.             break;
  691.          case 10:
  692.             this.this$0.setHelpBox();
  693.             break;
  694.          case 11:
  695.             this.this$0.setMainMenu();
  696.       }
  697.  
  698.    }
  699.  
  700.    public void Update() {
  701.       if (this.gameState == 0) {
  702.          this.gameScreen.setPixels(this.devImage, 0, 0, 96, 80);
  703.          int var1 = (int)System.currentTimeMillis() - this.gameTimer;
  704.          if (var1 > 3000) {
  705.             this.setState(1);
  706.          }
  707.       } else if (this.gameState == 1) {
  708.          int var17 = (int)System.currentTimeMillis() - this.gameTimer;
  709.          if (var17 > 5000) {
  710.             this.gameScreen.clear((byte)0);
  711.             this.drawHiScore(this.gameScreen.getImage().getGraphics());
  712.             if (var17 > 10000) {
  713.                this.gameTimer = (int)System.currentTimeMillis();
  714.             }
  715.          } else {
  716.             this.gameScreen.setPixels(this.titleImage, 0, 0, 96, 80);
  717.          }
  718.  
  719.          if ((this.joystick & 16) != 0) {
  720.             this.setState(11);
  721.          }
  722.       } else if (this.gameState == 2) {
  723.          this.gameScreen.setPixels(this.stageImages[this.levelNum], 0, 0, 96, 80);
  724.          int var18 = (int)System.currentTimeMillis() - this.gameTimer;
  725.          if (this.joystick != 0 || var18 > 2000) {
  726.             this.setState(3);
  727.          }
  728.       } else if (this.gameState != 3 && this.gameState != 4) {
  729.          if (this.gameState == 5) {
  730.             this.textSprite.setFrame(2);
  731.             this.textSprite.setVisible(true);
  732.             this.textSprite.setPosition(20, 22);
  733.             int var24 = (int)System.currentTimeMillis() - this.gameTimer;
  734.             if (var24 > 2000) {
  735.                this.textSprite.setVisible(false);
  736.                if (this.checkHiScore(this.player[5])) {
  737.                   this.setState(8);
  738.                } else {
  739.                   this.setState(1);
  740.                }
  741.             }
  742.          } else if (this.gameState == 6) {
  743.             this.textSprite.setFrame(1);
  744.             this.textSprite.setVisible(true);
  745.             this.textSprite.setPosition(20, 22);
  746.             int var25 = (int)System.currentTimeMillis() - this.gameTimer;
  747.             if (var25 > 3000) {
  748.                this.textSprite.setVisible(false);
  749.                int[] var40 = this.player;
  750.                var40[5] += 20 * this.player[7];
  751.                ++this.levelNum;
  752.                if (this.levelNum < 5) {
  753.                   this.setState(2);
  754.                } else {
  755.                   this.setState(7);
  756.                }
  757.             }
  758.          } else if (this.gameState == 7) {
  759.             this.gameScreen.setPixels(this.winnerImage, 0, 0, 96, 80);
  760.             int var26 = (int)System.currentTimeMillis() - this.gameTimer;
  761.             if (var26 > 5000) {
  762.                if (this.checkHiScore(this.player[5])) {
  763.                   this.setState(8);
  764.                } else {
  765.                   this.setState(1);
  766.                }
  767.             }
  768.          } else if (this.gameState != 8 && this.gameState == 9) {
  769.             this.WriteSettings();
  770.             this.setState(1);
  771.          }
  772.       } else {
  773.          if (this.redraw) {
  774.             this.gameScreen.setPixels(this.bgImage, 0, 0, 96, 80);
  775.             this.redraw = false;
  776.          }
  777.  
  778.          if (this.gameState == 4 && this.player[0] != 2) {
  779.             ++this.cdFrames;
  780.             if (this.cdFrames >= this.cdFPS) {
  781.                this.cdFrames = 0;
  782.                int var10002 = this.player[7]--;
  783.                if (this.player[7] <= 0) {
  784.                   this.player[7] = 0;
  785.                   this.setState(5);
  786.                }
  787.             }
  788.          }
  789.  
  790.          this.cdDigit = this.player[7];
  791.          if (this.cdDigit != this.lastCountdown) {
  792.             this.lastCountdown = this.cdDigit;
  793.             this.drawNDigitNumber(this.gameScreen.getImage().getGraphics(), 42, 6, this.cdDigit, 2);
  794.          }
  795.  
  796.          if (this.player[5] != this.lastScore) {
  797.             this.lastScore = this.player[5];
  798.             this.drawNDigitNumber(this.gameScreen.getImage().getGraphics(), 0, 6, this.player[5], 4);
  799.          }
  800.  
  801.          if (this.player[8] != this.lastSpeed) {
  802.             this.lastSpeed = this.player[8];
  803.             this.drawNDigitNumber(this.gameScreen.getImage().getGraphics(), 78, 6, this.player[8], 3);
  804.          }
  805.  
  806.          if (this.gameState == 4) {
  807.             if (this.player[0] == 0) {
  808.                if ((this.joystick & 4) != 0) {
  809.                   if (this.player[4] < 256) {
  810.                      this.player[9] = 32;
  811.                   } else {
  812.                      this.player[10] = 1;
  813.                   }
  814.                }
  815.  
  816.                if ((this.joystick & 8) != 0) {
  817.                   this.joystick &= -9;
  818.                   if (this.player[10] == 1) {
  819.                      this.player[10] = 0;
  820.                   } else {
  821.                      this.player[9] = -32;
  822.                   }
  823.                }
  824.  
  825.                byte var19 = 0;
  826.                int var3 = 0;
  827.                if ((this.joystick & 2) != 0) {
  828.                   var19 = 1;
  829.                   var3 = this.player[11] >> 1;
  830.                } else if ((this.joystick & 1) != 0) {
  831.                   var19 = 2;
  832.                   var3 = -this.player[11] >> 1;
  833.                }
  834.  
  835.                if (var19 != this.player[3]) {
  836.                   this.carSprite.setFrame(var19);
  837.                   this.player[3] = var19;
  838.                }
  839.  
  840.                if (var3 != 0) {
  841.                   int[] var10000 = this.player;
  842.                   var10000[1] += var3;
  843.                   if (this.player[1] > 12288) {
  844.                      this.player[1] = 12288;
  845.                   }
  846.  
  847.                   if (this.player[1] < -12288) {
  848.                      this.player[1] = -12288;
  849.                   }
  850.                }
  851.             } else if (this.player[0] == 1) {
  852.                this.flipyvel -= 10;
  853.                this.flipy -= this.flipyvel;
  854.                if (this.flipspr == 0 && this.flipyvel > 0 && this.flipy >> 4 <= 64) {
  855.                   this.flipSprite.setVisible(true);
  856.                   this.carSprite.setVisible(false);
  857.                   this.flipspr = 1;
  858.                }
  859.  
  860.                if (this.flipspr == 1 && this.flipyvel < 0) {
  861.                   this.flipspr = 2;
  862.                }
  863.  
  864.                if (this.flipy >> 4 >= 63) {
  865.                   this.flipy = 1008;
  866.                   int var41 = this.player[6]--;
  867.                   if (this.player[6] < 0) {
  868.                      this.flipSprite.setVisible(false);
  869.                      this.carSprite.setVisible(true);
  870.                      this.player[0] = 0;
  871.                      this.flipspr = 0;
  872.                   }
  873.                }
  874.             } else if (this.player[0] == 2 && this.player[4] == 0) {
  875.                this.setState(6);
  876.             }
  877.          } else {
  878.             this.joystick = 0;
  879.          }
  880.  
  881.          int var27 = this.theTrack[(this.player[2] >> 8) + 37] >> 1;
  882.          if (var27 == 1 && this.lastTrack != var27) {
  883.             ++this.trackSeg;
  884.          }
  885.  
  886.          int var14;
  887.          int var15;
  888.          if (var27 < 2) {
  889.             var14 = -9216;
  890.             var15 = 9216;
  891.          } else if (var27 >= 2 && var27 <= 7) {
  892.             --var27;
  893.             var14 = -9216;
  894.             var15 = (-5120 * var27 + 9216 * (6 - var27)) / 6;
  895.          } else {
  896.             var27 -= 7;
  897.             var14 = (5120 * var27 + -9216 * (6 - var27)) / 6;
  898.             var15 = 9216;
  899.          }
  900.  
  901.          this.lastTrack = var27;
  902.          if (this.player[10] != this.lastGear) {
  903.             this.lastGear = this.player[10];
  904.             this.gameScreen.getImage().getGraphics().drawImage(this.gearImages[this.player[10]], 62, 0, 20);
  905.          }
  906.  
  907.          if (this.player[9] > 0) {
  908.             short var13;
  909.             if (this.player[10] == 0) {
  910.                this.player[9] = 32;
  911.                var13 = 768;
  912.             } else {
  913.                if (this.player[4] < 640) {
  914.                   this.player[9] = 16;
  915.                } else {
  916.                   this.player[9] = 32;
  917.                }
  918.  
  919.                var13 = 1024;
  920.             }
  921.  
  922.             if (this.player[1] < var14 || this.player[1] > var15) {
  923.                var13 = 512;
  924.             }
  925.  
  926.             var27 = this.player[4] - var13;
  927.             if (var27 < 0) {
  928.                int[] var35 = this.player;
  929.                var35[4] += this.player[9];
  930.             } else if (var27 < 32) {
  931.                int[] var36 = this.player;
  932.                var36[4] -= var27;
  933.             } else {
  934.                int[] var37 = this.player;
  935.                var37[4] -= 32;
  936.             }
  937.          } else {
  938.             int[] var34 = this.player;
  939.             var34[4] += this.player[9];
  940.          }
  941.  
  942.          if (this.player[4] < 0) {
  943.             this.player[4] = 0;
  944.          }
  945.  
  946.          this.player[8] = this.player[4] * 160 >> 10;
  947.          this.player[11] = this.player[4] * 355 >> 8;
  948.          int[] var38 = this.player;
  949.          var38[2] += this.player[11];
  950.          if (this.player[0] != 2 && this.trackSeg == 2) {
  951.             this.player[0] = 2;
  952.             this.player[9] = -60;
  953.          }
  954.  
  955.          int var20 = this.availObsticle;
  956.          int[] var6 = this.obsticles;
  957.          var27 = this.player[2] + 'φÿÇ' >> 11;
  958.          if (var27 != this.mapPos) {
  959.             this.mapPos = var27;
  960.             if (this.theMap[this.mapPos * 4 + 0] != 0) {
  961.                var6[var20 + 0] = -1;
  962.                var6[var20 + 1] = (this.theMap[this.mapPos * 4 + 0] - 8) * 240;
  963.                var6[var20 + 2] = 54784;
  964.                var6[var20 + 3] = this.theMap[this.mapPos * 4 + 1] - 1 << 3;
  965.                this.obsSprite[var20 >> 2].setVisible(true);
  966.                var20 -= 4;
  967.                if (var20 < 0) {
  968.                   var20 = 28;
  969.                }
  970.             }
  971.  
  972.             if (this.theMap[this.mapPos * 4 + 2] != 0) {
  973.                var6[var20 + 0] = -1;
  974.                var6[var20 + 1] = (this.theMap[this.mapPos * 4 + 2] - 8) * 240;
  975.                var6[var20 + 2] = 54784;
  976.                var6[var20 + 3] = this.theMap[this.mapPos * 4 + 3] - 1 << 3;
  977.                this.obsSprite[var20 >> 2].setVisible(true);
  978.                var20 -= 4;
  979.                if (var20 < 0) {
  980.                   var20 = 28;
  981.                }
  982.             }
  983.          }
  984.  
  985.          this.availObsticle = var20;
  986.  
  987.          for(int var12 = 0; var12 < 8; ++var12) {
  988.             var20 += 4;
  989.             if (var20 > 28) {
  990.                var20 = 0;
  991.             }
  992.  
  993.             int var16;
  994.             if ((var16 = var6[var20 + 2] >> 8) != 0) {
  995.                var6[var20 + 2] -= this.player[11];
  996.                var27 = var6[var20 + 2] >> 8;
  997.                if (var27 < 37) {
  998.                   this.obsSprite[var20 >> 2].setVisible(false);
  999.                   var6[var20 + 2] = 0;
  1000.                }
  1001.  
  1002.                int var9 = var6[var20 + 1] / var27 + 40;
  1003.                if (var16 >= 39 && var27 < 39 && var9 < (this.player[1] >> 8) + 60 && (this.player[1] >> 8) + 33 < var9 + 15) {
  1004.                   if (var6[var20 + 3] == 0) {
  1005.                      this.obsSprite[var20 >> 2].setVisible(false);
  1006.                      var38 = this.player;
  1007.                      var38[5] += 30;
  1008.                      var6[var20 + 2] = 0;
  1009.                   } else {
  1010.                      this.player[0] = 1;
  1011.                      this.player[9] = -96;
  1012.                      this.player[6] = 30;
  1013.                      this.flipy = 1008;
  1014.                      this.flipyvel = 80;
  1015.                      this.flipspr = 0;
  1016.                   }
  1017.                }
  1018.  
  1019.                this.obsSprite[var20 >> 2].setPosition(var9, this.z_to_y[var27]);
  1020.                int var5 = this.z_to_scale[var27] + var6[var20 + 3];
  1021.                if (var5 != var6[var20 + 0]) {
  1022.                   var6[var20 + 0] = var5;
  1023.                   this.obsSprite[var20 >> 2].setFrame(var5);
  1024.                }
  1025.             }
  1026.          }
  1027.  
  1028.          var6 = this.linetab;
  1029.          int[] var7 = this.zdiffs;
  1030.          byte[] var2 = this.theTrack;
  1031.          var27 = (this.player[2] >> 8) + this.zvals[0];
  1032.          var20 = 0;
  1033.  
  1034.          for(int var32 = 0; var20 < 37; var32 += 12) {
  1035.             byte var4;
  1036.             if ((var4 = var2[var27]) != var6[var20]) {
  1037.                var6[var20] = var4;
  1038.                System.arraycopy(this.roadpixels[var4], var32, this.roadbmp, var32, 12);
  1039.             }
  1040.  
  1041.             var27 -= var7[var20];
  1042.             ++var20;
  1043.          }
  1044.  
  1045.          this.gameScreen.setPixels(this.roadbmp, 0, 43, 96, 37);
  1046.          if (this.player[0] != 1) {
  1047.             this.carSprite.setPosition((this.player[1] >> 8) + 34, 63);
  1048.          } else {
  1049.             this.gameScreen.setPixels(this.mntsImage, 0, 13, 96, 31);
  1050.             if (this.flipspr == 0) {
  1051.                this.carSprite.setPosition((this.player[1] >> 8) + 34, this.flipy >> 4);
  1052.             } else {
  1053.                this.flipSprite.setFrame(this.flipspr - 1);
  1054.                this.flipSprite.setPosition((this.player[1] >> 8) + 34, (this.flipy >> 4) - 15);
  1055.             }
  1056.          }
  1057.  
  1058.          if (this.gameState == 3) {
  1059.             var20 = (int)System.currentTimeMillis() - this.gameTimer;
  1060.             if (var20 > 1000) {
  1061.                this.gameTimer = (int)System.currentTimeMillis();
  1062.                ++this.countDown;
  1063.                if (this.countDown == 3) {
  1064.                   this.setState(4);
  1065.                }
  1066.             }
  1067.  
  1068.             this.gameScreen.setPixels(this.mntsImage, 0, 13, 96, 31);
  1069.             if (this.countDown < 3) {
  1070.                this.countSprite.setFrame(this.countDown);
  1071.                this.countSprite.setVisible(true);
  1072.                this.countSprite.setPosition(36, 16);
  1073.             } else {
  1074.                this.countSprite.setVisible(false);
  1075.             }
  1076.          } else if (this.countDown == 3) {
  1077.             this.gameScreen.setPixels(this.mntsImage, 0, 13, 96, 31);
  1078.             var20 = (int)System.currentTimeMillis() - this.gameTimer;
  1079.             if (var20 > 700) {
  1080.                this.goSprite.setVisible(false);
  1081.                ++this.countDown;
  1082.             } else {
  1083.                this.goSprite.setVisible(true);
  1084.                this.goSprite.setPosition(12, 16);
  1085.             }
  1086.          }
  1087.  
  1088.          if (this.player[0] == 2) {
  1089.             this.textSprite.setFrame(1);
  1090.             this.textSprite.setVisible(true);
  1091.             this.textSprite.setPosition(20, 22);
  1092.          }
  1093.       }
  1094.  
  1095.    }
  1096.  
  1097.    public void run() {
  1098.       while(true) {
  1099.          try {
  1100.             Thread.yield();
  1101.          } catch (Exception var4) {
  1102.          }
  1103.  
  1104.          if (this.gameState != 8 && this.gameState != 10 && this.gameState != 11) {
  1105.             this.Update();
  1106.  
  1107.             try {
  1108.                this.gfxManager.paint(this.gameScreen, 0, 0);
  1109.                this.gameScreen.blitToScreen(0, 0);
  1110.             } catch (Exception var3) {
  1111.                System.out.println("Exception: " + var3);
  1112.             }
  1113.          }
  1114.       }
  1115.    }
  1116.  
  1117.    public void paint(Graphics var1) {
  1118.       if (this.readyToPaint) {
  1119.          try {
  1120.             this.gfxManager.paint(this.gameScreen, 0, 0);
  1121.             this.gameScreen.blitToScreen(0, 0);
  1122.          } catch (Exception var3) {
  1123.             System.out.println("Exception: " + var3);
  1124.          }
  1125.       }
  1126.  
  1127.    }
  1128.  
  1129.    public void keyRepeated(int var1) {
  1130.    }
  1131.  
  1132.    public void keyReleased(int var1) {
  1133.       this.joystick = 0;
  1134.    }
  1135.  
  1136.    public void keyPressed(int var1) {
  1137.       this.joystick = this.keyMap[var1 & 255];
  1138.    }
  1139. }
  1140.